package com.xuanyuanxinyu.func.network.retrofit

import android.util.Log
import com.xuanyuanxinyu.func.network.retrofit.RetrofitManager.createOkHttpClient
import okhttp3.Call
import okhttp3.Callback
import okhttp3.FormBody
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.RequestBody
import okhttp3.Response
import java.io.IOException

/**
 * @FileName:
 * @Description:
 * @author ken.luo
 * @date 2023/4/4
 * @version V1.0
 * @email 424533553@qq.com
 */
class RetrofitQuestDemo {
//    Request{method=POST, url=http://fanyi.youdao.com/openapi.do, tags={class java.lang.Object=FA0011}}方法的 dnsEnd方法 耗时：0.004301719秒
//    Request{method=GET, url=http://fanyi.youdao.com/openapi.do?keyfrom=imoocdict123456&key=324273592&type=data&doctype=json&version=1.1&q=blue, tags={class java.lang.Object=FA0010}}方法的 dnsEnd方法 耗时：0.004300885秒
//    Request{method=POST, url=http://fanyi.youdao.com/openapi.do, tags={class java.lang.Object=FA0011}}方法的 connectEnd方法 耗时：0.044430729秒
//           Request{method=GET, url=http://fanyi.youdao.com/openapi.do?keyfrom=imoocdict123456&key=324273592&type=data&doctype=json&version=1.1&q=blue, tags={class java.lang.Object=FA0010}}方法的 connectEnd方法 耗时：0.04443151秒
//Request{method=GET, url=http://fanyi.youdao.com/openapi.do?keyfrom=imoocdict123456&key=324273592&type=data&doctype=json&version=1.1&q=blue, tags={class java.lang.Object=FA0010}}方法的 requestHeadersEnd方法 耗时：6.17344E-4秒
//    Request{method=POST, url=http://fanyi.youdao.com/openapi.do, tags={class java.lang.Object=FA0011}}方法的 requestHeadersEnd方法 耗时：6.71146E-4秒
//   Request{method=POST, url=http://fanyi.youdao.com/openapi.do, tags={class java.lang.Object=FA0011}}方法的 requestBodyEnd方法 耗时：7.63646E-4秒
//  Request{method=GET, url=http://fanyi.youdao.com/openapi.do?keyfrom=imoocdict123456&key=324273592&type=data&doctype=json&version=1.1&q=blue, tags={class java.lang.Object=FA0010}}方法的 responseHeadersEnd方法 耗时：0.093491979秒
// Request{method=GET, url=http://fanyi.youdao.com/openapi.do?keyfrom=imoocdict123456&key=324273592&type=data&doctype=json&version=1.1&q=blue, tags={class java.lang.Object=FA0010}}方法的 responseBodyEnd方法 耗时：0.003987135秒
//Request{method=GET, url=http://fanyi.youdao.com/openapi.do?keyfrom=imoocdict123456&key=324273592&type=data&doctype=json&version=1.1&q=blue, tags={class java.lang.Object=FA0010}}方法的 connectionReleased方法 耗时：0.102222969秒
//    Request{method=GET, url=http://fanyi.youdao.com/openapi.do?keyfrom=imoocdict123456&key=324273592&type=data&doctype=json&version=1.1&q=blue, tags={class java.lang.Object=FA0010}}方法的 callEnd方法 耗时：0.159830573秒
//   Request{method=POST, url=http://fanyi.youdao.com/openapi.do, tags={class java.lang.Object=FA0011}}方法的 responseHeadersEnd方法 耗时：0.163656458秒
//  Request{method=POST, url=http://fanyi.youdao.com/openapi.do, tags={class java.lang.Object=FA0011}}方法的 responseBodyEnd方法 耗时：0.001606042秒
// Request{method=POST, url=http://fanyi.youdao.com/openapi.do, tags={class java.lang.Object=FA0011}}方法的 connectionReleased方法 耗时：0.170009584秒
//Request{method=POST, url=http://fanyi.youdao.com/openapi.do, tags={class java.lang.Object=FA0011}}方法的 callEnd方法 耗时：0.227597239秒

    /**
     * 有效的可以测试验证的demo
     */
    fun requestTest() {
        val okHttpClient : OkHttpClient = createOkHttpClient()
        val request : Request = Request.Builder()
                //   .post(RequestBody.create("application/json".toMediaTypeOrNull(),"{}"))
                //    post json提交
                //    .post( FormBody.Builder().build())  // post 表单提交
                .url("https://www.baidu.com").build()
        okHttpClient.newCall(request).enqueue(object : Callback {
            override fun onFailure(call : Call, e : IOException) {
                Log.i("TAG++++++", "onFailure: ")
            }

            @Throws(IOException::class)
            override fun onResponse(call : Call, response : Response) {
                val code = response.code
                Log.i("TAG++++++", "onResponse: " + code + "  内容=" + response.body?.string())
            }
        })
    }

    /**
     * OkHttp Get请求
     */
    private fun getData(url : String) {
        val okHttpClient : OkHttpClient = createOkHttpClient()
        //1.创建Request对象 构建一个具体的网络请求对象 包括具体的请求url&请求头&请求体等等 tag设置每个接口的tag 用于区分那个方法
        val request : Request = Request.Builder().url(url).get().tag("FA0010").build()
        //2.获取Call对象 将具体的网络请求与执行请求的实体进行绑定，形成一个具体的正式的可执行实体
        val call : Call = okHttpClient.newCall(request)
        //3.Call对象进行网络请求 enqueue异步  execute同步一般不用
        call.enqueue(object : Callback {
            override fun onFailure(call : Call, e : IOException) {
                Log.d("OkHttpOptimizeActivity",
                      "Get请求 onFailure方法执行 错误信息----:" + e.message)
            }

            override fun onResponse(call : Call, response : Response) {
                if (response.isSuccessful) {
                    Log.d("OkHttpOptimizeActivity",
                          "Get请求 onResponse方法执行报文----:" + response.body!!.string())
                }
            }
        })

    }

    /**
     * OkHttp Post请求
     */
    private fun postData(params : Map<String, String>?, url : String) {
        val okHttpClient : OkHttpClient = createOkHttpClient()
        //1.获取FormBody.Builder对象
        val builder : FormBody.Builder = FormBody.Builder()
        //2.遍历params 将其放入到FormBody.Builder 对象
        if (!params.isNullOrEmpty()) {
            for (entry in params.entries) {
                builder.add(entry.key, entry.value)
            }
        }
        //3.获取RequestBody 对象
        val requestBody : RequestBody = builder.build()
        //4.创建Request对象 构建一个具体的网络请求对象 包括具体的请求url&请求头&请求体等等 tag设置每个接口的tag 用于区分那个方法
        val request : Request = Request.Builder().url(url).post(requestBody).tag("FA0011").build()
        //5.获取Call对象 将具体的网络请求与执行请求的实体进行绑定，形成一个具体的正式的可执行实体
        val call : Call = okHttpClient.newCall(request)
        //6.Call对象进行网络请求 enqueue异步  execute同步一般不用
        call.enqueue(object : Callback {
            override fun onFailure(call : Call, e : IOException) {
                Log.d("OkHttpOptimizeActivity",
                      "Post请求 onFailure方法执行 错误信息----:" + e.message)
            }

            override fun onResponse(call : Call, response : Response) {
                if (response.isSuccessful) {
                    Log.d("OkHttpOptimizeActivity",
                          "Post请求 onResponse方法执行报文----:" + response.body!!.string())
                }
            }
        })

    }

}